]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionUtils: Add DISABLING and ENABLING extension states
authorEvan Welsh <contact@evanwelsh.com>
Mon, 25 Jul 2022 02:25:23 +0000 (19:25 -0700)
committerMarge Bot <marge-bot@gnome.org>
Thu, 1 Dec 2022 12:59:32 +0000 (12:59 +0000)
Extensions can export asynchronous enable() and disable()
functions. To guard against re-entrancy when enabling or
disabling an extension, this commit adds two new states:
ENABLING and DISABLING which are set immediately prior
to calling enable() and disable() respectively.

This commit updates the extensions CLI and Extensions app
with new strings for these states.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2364>

data/dbus-interfaces/org.gnome.Shell.Extensions.xml
js/misc/extensionUtils.js
js/ui/extensionSystem.js
js/ui/lookingGlass.js
subprojects/extensions-tool/src/common.h
subprojects/extensions-tool/src/main.c

index 51448dce728d6caba42a636b6e06b88295d823b4..780aa9a4a1c86f4fc90dc1bb19dd29b8e2f32dd5 100644 (file)
@@ -77,6 +77,8 @@
                 <member>4: OUT_OF_DATE</member>
                 <member>5: DOWNLOADING</member>
                 <member>6: INITIALIZED</member>
+                <member>7: DISABLING</member>
+                <member>8: ENABLING</member>
                 <member>99: UNINSTALLED</member>
               </simplelist>
             </para></listitem>
index 3e89a870d85fb665c39a4a07c9ced37f9b409f22..97ea66e8250bf37cb7454f9ddd021f9bec5950d1 100644 (file)
@@ -38,6 +38,8 @@ var ExtensionState = {
     OUT_OF_DATE: 4,
     DOWNLOADING: 5,
     INITIALIZED: 6,
+    DISABLING: 7,
+    ENABLING: 8,
 
     // Used as an error state for operations on unknown extensions,
     // should never be in a real extensionMeta object.
index c66df59a1f1faae9514d6b92e1a7d41cb8f25154..5dfb325f2d3f9d9632df7a9968d7a817b7895d08 100644 (file)
@@ -100,6 +100,9 @@ var ExtensionManager = class extends Signals.EventEmitter {
         if (extension.state != ExtensionState.ENABLED)
             return;
 
+        extension.state = ExtensionState.DISABLING;
+        this.emit('extension-state-changed', extension);
+
         // "Rebase" the extension order by disabling and then enabling extensions
         // in order to help prevent conflicts.
 
@@ -164,6 +167,9 @@ var ExtensionManager = class extends Signals.EventEmitter {
         if (extension.state != ExtensionState.DISABLED)
             return;
 
+        extension.state = ExtensionState.ENABLING;
+        this.emit('extension-state-changed', extension);
+
         let stylesheetNames = [`${global.session_mode}.css`, 'stylesheet.css'];
         let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
         for (let i = 0; i < stylesheetNames.length; i++) {
index f3af5638eb30ef08cece6e0f9201e96943e85e33..e903cc7dc1334e13a530e322333bd3cdc44ce23f 100644 (file)
@@ -790,16 +790,20 @@ var Extensions = GObject.registerClass({
     _stateToString(extensionState) {
         switch (extensionState) {
         case ExtensionState.ENABLED:
-            return _("Enabled");
+            return _('Enabled');
         case ExtensionState.DISABLED:
         case ExtensionState.INITIALIZED:
-            return _("Disabled");
+            return _('Disabled');
         case ExtensionState.ERROR:
-            return _("Error");
+            return _('Error');
         case ExtensionState.OUT_OF_DATE:
-            return _("Out of date");
+            return _('Out of date');
         case ExtensionState.DOWNLOADING:
-            return _("Downloading");
+            return _('Downloading');
+        case ExtensionState.DISABLING:
+            return _('Disabling');
+        case ExtensionState.ENABLING:
+            return _('Enabling');
         }
         return 'Unknown'; // Not translated, shouldn't appear
     }
index 2b0448495d3891fcce560b6208e93745ca8fa03e..74d789e9163c718ad0c31bfe444e3fd4f36243a5 100644 (file)
@@ -36,6 +36,8 @@ typedef enum {
   STATE_OUT_OF_DATE,
   STATE_DOWNLOADING,
   STATE_INITIALIZED,
+  STATE_DISABLING,
+  STATE_ENABLING,
 
   STATE_UNINSTALLED = 99
 } ExtensionState;
index 66a3476266149dfbf16720447fbb7157d7b4a68f..5bf2579b7fd4dd185d6625119f2011d75d7f82f8 100644 (file)
@@ -43,6 +43,10 @@ extension_state_to_string (ExtensionState state)
       return "DOWNLOADING";
     case STATE_INITIALIZED:
       return "INITIALIZED";
+    case STATE_DISABLING:
+      return "DISABLING";
+    case STATE_ENABLING:
+      return "ENABLING";
     case STATE_UNINSTALLED:
       return "UNINSTALLED";
     }